package fun.codefarmer.pm.service.Impl;

import fun.codefarmer.pm.mapper.MenuRoleMapper;
import fun.codefarmer.pm.mapper.RoleMapper;
import fun.codefarmer.pm.model.RespBean;
import fun.codefarmer.pm.model.Role;
import fun.codefarmer.pm.service.MenuRoleService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @ ClassName MenuRoleServiceImpl
 * @ Descriotion TODO
 * @ author  codeFarmer_z
 * @ 公众号：码农教程
 * @ Date 2022/4/23 17:57
 **/
@Service
public class MenuRoleServiceImpl implements MenuRoleService {

    @Resource
    private MenuRoleMapper menuRoleMapper;
    @Resource
    private RoleMapper roleMapper;

    @Override
    public RespBean getMenuIdsByRoleId(Integer rid) {
        List<Integer> menuid = menuRoleMapper.getMenuIdsByRoleId(rid);
        if (menuid != null) {
            return RespBean.ok("", menuid);
        }
        return RespBean.error("查询专属menuid失败");
    }

    //事务管理
    @Transactional
    @Override
    public RespBean updateMenuIdsByRid(Integer rid, Integer[] menuids) {
        //有两种操作方式
        /**
         * 1.根据rid 删除所有资源，在执行插入操作。
         * 2.根据rid 查询数据，然后在做修改。（此方法执行比较复杂）
         */
        int i = menuRoleMapper.deleteByRid(rid);
        // 当删除全部角色时，不需要添加。
        if (menuids == null || menuids.length == 0) {
            return RespBean.ok("修改成功");
        }
        int n = menuRoleMapper.insertRidAndmenuid(rid, menuids);
        if (n == menuids.length) {
            return RespBean.ok("修改成功");
        }
        return RespBean.error("修改失败");
    }

    @Override
    public RespBean insert(Role role) {
        if (!role.getName().startsWith("ROLE_")) {
            role.setName("ROLE_"+role.getName());
        }
        int insert = roleMapper.insert(role);
        if (insert > 0) {
            return RespBean.ok("添加成功");
        }
        return RespBean.error("添加失败");
    }

    @Override
    public Boolean deleteMenuByRid(Integer rid) {
        int i = menuRoleMapper.deleteByRid(rid);
        return i>0;
    }
}
